<?php
// +----------------------------------------------------------------------
// | OneThink [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2013 http://www.onethink.cn All rights reserved.
// +----------------------------------------------------------------------
// | Author: huajie <banhuajie@163.com>
// +----------------------------------------------------------------------
namespace Admin\Controller;

use Admin\Model\AuthGroupModel;
use Think\Page;

/**
 * 后台内容控制器
 * @author huajie <banhuajie@163.com>
 */
class ArticleController extends AdminController
{

    /* 保存允许访问的公共方法 */
    static protected $allow = array('draftbox', 'mydocument');

    private $cate_id = null; //文档分类id

    /**
     * 检测需要动态判断的文档类目有关的权限
     *
     * @return boolean|null
     *      返回true则表示当前访问有权限
     *      返回false则表示当前访问无权限
     *      返回null，则会进入checkRule根据节点授权判断权限
     *
     * @author 朱亚杰  <xcoolcc@gmail.com>
     */
    protected function checkDynamic()
    {
        $cates = AuthGroupModel::getAuthCategories(UID);
        switch (strtolower(ACTION_NAME)) {
            case 'index':   //文档列表
            case 'add':   // 新增
                $cate_id = I('cate_id');
                break;
            case 'edit':    //编辑
            case 'update':  //更新
                $doc_id = I('id');
                $cate_id = M('Document')->where(array('id' => $doc_id))->getField('category_id');
                break;
            case 'setstatus': //更改状态
            case 'permit':    //回收站
                $doc_id = (array)I('ids');
                $cate_id = M('Document')->where(array('id' => array('in', $doc_id)))->getField('category_id', true);
                $cate_id = array_unique($cate_id);
                break;
        }
        if (!$cate_id) {
            return null;//不明
        } elseif (!is_array($cate_id) && in_array($cate_id, $cates)) {
            return true;//有权限
        } elseif (is_array($cate_id) && $cate_id == array_intersect($cate_id, $cates)) {
            return true;//有权限
        } else {
            return false;//无权限
        }
    }

    /**
     * 显示左边菜单，进行权限控制
     * @author huajie <banhuajie@163.com>
     */
    protected function getMenu()
    {
        //获取动态分类
        $cate_auth = AuthGroupModel::getAuthCategories(UID); //获取当前用户所有的内容权限节点
        $cate_auth = $cate_auth == null ? array() : $cate_auth;
        $cate = M('Category')->where(array('status' => 1))->field('id,title,pid,allow_publish')->order('pid,sort')->select();

        //没有权限的分类则不显示
        if (!IS_ROOT) {
            foreach ($cate as $key => $value) {
                if (!in_array($value['id'], $cate_auth)) {
                    unset($cate[$key]);
                }
            }
        }

        $cate = list_to_tree($cate);    //生成分类树

        //获取分类id
        $cate_id = I('param.cate_id');
        $this->cate_id = $cate_id;

        //是否展开分类
        $hide_cate = false;
        if (ACTION_NAME != 'recycle' && ACTION_NAME != 'draftbox' && ACTION_NAME != 'mydocument') {
            $hide_cate = true;
        }

        //生成每个分类的url
        foreach ($cate as $key => &$value) {
            $value['url'] = 'Article/index?cate_id=' . $value['id'];
            if ($cate_id == $value['id'] && $hide_cate) {
                $value['current'] = true;
            } else {
                $value['current'] = false;
            }
            if (!empty($value['_child'])) {
                $is_child = false;
                foreach ($value['_child'] as $ka => &$va) {
                    $va['url'] = 'Article/index?cate_id=' . $va['id'];
                    if (!empty($va['_child'])) {
                        foreach ($va['_child'] as $k => &$v) {
                            $v['url'] = 'Article/index?cate_id=' . $v['id'];
                            $v['pid'] = $va['id'];
                            $is_child = $v['id'] == $cate_id ? true : false;
                        }
                    }
                    //展开子分类的父分类
                    if ($va['id'] == $cate_id || $is_child) {
                        $is_child = false;
                        if ($hide_cate) {
                            $value['current'] = true;
                            $va['current'] = true;
                        } else {
                            $value['current'] = false;
                            $va['current'] = false;
                        }
                    } else {
                        $va['current'] = false;
                    }
                }
            }
        }
        $this->assign('nodes', $cate);
        $this->assign('cate_id', $this->cate_id);

        //获取面包屑信息
        $nav = get_parent_category($cate_id);
        $this->assign('rightNav', $nav);

        //获取回收站权限
        $this->assign('show_recycle', IS_ROOT || $this->checkRule('Admin/article/recycle'));
        //获取草稿箱权限
        $this->assign('show_draftbox', C('OPEN_DRAFTBOX'));
        //获取审核列表权限
        $this->assign('show_examine', IS_ROOT || $this->checkRule('Admin/article/examine'));
    }

    /**
     * 分类文档列表页
     * @param integer $cate_id 分类id
     * @param integer $model_id 模型id
     * @param integer $position 推荐标志
     * @param integer $group_id 分组id
     */
    public function index($cate_id = null, $model_id = null, $position = null, $group_id = null)
    {
        //获取左边菜单
        $this->getMenu();

        if ($cate_id === null) {
            $cate_id = $this->cate_id;
        }
        if (!empty($cate_id)) {
            $pid = I('pid', 0);
            // 获取列表绑定的模型
            if ($pid == 0) {
                $models = get_category($cate_id, 'model');
                // 获取分组定义
                $groups = get_category($cate_id, 'groups');
                if ($groups) {
                    $groups = parse_field_attr($groups);
                }
            } else { // 子文档列表
                $models = get_category($cate_id, 'model_sub');
            }
            if (is_null($model_id) && !is_numeric($models)) {
                // 绑定多个模型 取基础模型的列表定义
                $model = M('Model')->getByName('document');
            } else {
                $model_id = $model_id ?: $models;
                //获取模型信息
                $model = M('Model')->getById($model_id);
                if (empty($model['list_grid'])) {
                    $model['list_grid'] = M('Model')->getFieldByName('document', 'list_grid');
                }
            }
            $this->assign('model', explode(',', $models));
        } else {
            // 获取基础模型信息
            $model = M('Model')->getByName('document');
            $model_id = null;
            $cate_id = 0;
            $this->assign('model', null);
        }

        //解析列表规则
        $fields = array();
        $grids = preg_split('/[;\r\n]+/s', trim($model['list_grid']));
        foreach ($grids as &$value) {
            // 字段:标题:链接
            $val = explode(':', $value);
            // 支持多个字段显示
            $field = explode(',', $val[0]);
            $value = array('field' => $field, 'title' => $val[1]);
            if (isset($val[2])) {
                // 链接信息
                $value['href'] = $val[2];
                // 搜索链接信息中的字段信息
                preg_replace_callback('/\[([a-z_]+)\]/', function ($match) use (&$fields) {
                    $fields[] = $match[1];
                }, $value['href']);
            }
            if (strpos($val[1], '|')) {
                // 显示格式定义
                list($value['title'], $value['format']) = explode('|', $val[1]);
            }
            foreach ($field as $val) {
                $array = explode('|', $val);
                $fields[] = $array[0];
            }
        }

        // 文档模型列表始终要获取的数据字段 用于其他用途
        $fields[] = 'category_id';
        $fields[] = 'model_id';
        $fields[] = 'pid';
        // 过滤重复字段信息
        $fields = array_unique($fields);
        // 列表查询
        $list = $this->getDocumentList($cate_id, $model_id, $position, $fields, $group_id);
        // 列表显示处理
        $list = $this->parseDocumentList($list, $model_id);

        $this->assign('model_id', $model_id);
        $this->assign('group_id', $group_id);
        $this->assign('position', $position);
        $this->assign('groups', $groups);
        $this->assign('list', $list);
        $this->assign('list_grids', $grids);
        $this->assign('model_list', $model);
        // 记录当前列表页的cookie
        Cookie('__forward__', $_SERVER['REQUEST_URI']);
        $this->display();
    }

    /**
     * 默认文档列表方法
     * @param integer $cate_id 分类id
     * @param integer $model_id 模型id
     * @param integer $position 推荐标志
     * @param mixed $field 字段列表
     * @param integer $group_id 分组id
     */
    protected function getDocumentList($cate_id = 0, $model_id = null, $position = null, $field = true, $group_id = null)
    {
        /* 查询条件初始化 */
        $map = array();
        if (isset($_GET['title'])) {
            $map['title'] = array('like', '%' . (string)I('title') . '%');
        }
        if (isset($_GET['status'])) {
            $map['status'] = I('status');
            $status = $map['status'];
        } else {
            $status = null;
            $map['status'] = array('in', '0,1,2');
        }
        if (isset($_GET['time-start'])) {
            $map['update_time'][] = array('egt', strtotime(I('time-start')));
        }
        if (isset($_GET['time-end'])) {
            $map['update_time'][] = array('elt', 24 * 60 * 60 + strtotime(I('time-end')));
        }
        if (isset($_GET['nickname'])) {
            $map['uid'] = M('Member')->where(array('nickname' => I('nickname')))->getField('uid');
        }

        // 构建列表数据
        $Document = M('Document');

        if ($cate_id) {
            $map['category_id'] = $cate_id;
        }
        $map['pid'] = I('pid', 0);
        if ($map['pid']) { // 子文档列表忽略分类
            unset($map['category_id']);
        }
        $Document->alias('DOCUMENT');
        if (!is_null($model_id)) {
            $map['model_id'] = $model_id;
            if (is_array($field) && array_diff($Document->getDbFields(), $field)) {
                $modelName = M('Model')->getFieldById($model_id, 'name');
                $Document->join('__DOCUMENT_' . strtoupper($modelName) . '__ ' . $modelName . ' ON DOCUMENT.id=' . $modelName . '.id');
                $key = array_search('id', $field);
                if (false !== $key) {
                    unset($field[$key]);
                    $field[] = 'DOCUMENT.id';
                }
            }
        }
        if (!is_null($position)) {
            $map[] = "position & {$position} = {$position}";
        }
        if (!is_null($group_id)) {
            $map['group_id'] = $group_id;
        }
        $list = $this->lists($Document, $map, 'level DESC,DOCUMENT.id DESC', $field);

        if ($map['pid']) {
            // 获取上级文档
            $article = $Document->field('id,title,type')->find($map['pid']);
            $this->assign('article', $article);
        }
        //检查该分类是否允许发布内容
        $allow_publish = get_category($cate_id, 'allow_publish');

        $this->assign('status', $status);
        $this->assign('allow', $allow_publish);
        $this->assign('pid', $map['pid']);

        $this->meta_title = '文档列表';
        return $list;
    }

    /**
     * 设置一条或者多条数据的状态
     * @author huajie <banhuajie@163.com>
     */
    public function setStatus($model = 'Document')
    {
        return parent::setStatus('Document');
    }


    /**
     * 文档新增页面初始化
     * @author huajie <banhuajie@163.com>
     */
    public function add()
    {
        //获取左边菜单
        $this->getMenu();

        $cate_id = I('get.cate_id', 0);
        $model_id = I('get.model_id', 0);
        $group_id = I('get.group_id', '');

        empty($cate_id) && $this->error('参数不能为空！');
        empty($model_id) && $this->error('该分类未绑定模型！');

        //检查该分类是否允许发布
        $allow_publish = check_category($cate_id);
        !$allow_publish && $this->error('该分类不允许发布内容！');

        // 获取当前的模型信息
        $model = get_document_model($model_id);

        //处理结果
        $info['pid'] = $_GET['pid'] ? $_GET['pid'] : 0;
        $info['model_id'] = $model_id;
        $info['category_id'] = $cate_id;
        $info['group_id'] = $group_id;

        if ($info['pid']) {
            // 获取上级文档
            $article = M('Document')->field('id,title,type')->find($info['pid']);
            $this->assign('article', $article);
        }

        //获取表单字段排序
        $fields = get_model_attribute($model['id']);
        $this->assign('info', $info);
        $this->assign('fields', $fields);
        $this->assign('type_list', get_type_bycate($cate_id));
        $this->assign('model', $model);
        $this->meta_title = '新增' . $model['title'];
        $this->display();
    }

    /**
     * 文档编辑页面初始化
     * @author huajie <banhuajie@163.com>
     */
    public function edit()
    {
        //获取左边菜单
        $this->getMenu();

        $id = I('get.id', '');

        if (empty($id)) {
            $this->error('参数不能为空！');
        }

        // 获取详细数据 
        $Document = D('Document');
        $data = $Document->detail($id);

        if (!$data) {
            $this->error($Document->getError());
        }

        if ($data['pid']) {
            // 获取上级文档
            $article = $Document->field('id,title,type')->find($data['pid']);
            $this->assign('article', $article);
        }
        // 获取当前的模型信息
        $model = get_document_model($data['model_id']);

        $this->assign('data', $data);
        $this->assign('model_id', $data['model_id']);
        $this->assign('model', $model);

        //获取表单字段排序
        $fields = get_model_attribute($model['id']);
        $this->assign('fields', $fields);


        //获取当前分类的文档类型
        $this->assign('type_list', get_type_bycate($data['category_id']));

        $this->meta_title = '编辑文档';
        $this->display();
    }

    /**
     * 更新一条数据
     * @author huajie <banhuajie@163.com>
     */
    public function update()
    {
        $document = D('Document');
        $res = $document->update();
        if (!$res) {
            $this->error($document->getError());
        } else {
            $this->success($res['id'] ? '更新成功' : '新增成功', Cookie('__forward__'));
        }
    }

    /**
     * 待审核列表
     */
    public function examine()
    {
        //获取左边菜单
        $this->getMenu();

        $map['status'] = 2;
        if (!IS_ROOT) {
            $cate_auth = AuthGroupModel::getAuthCategories(UID);
            if ($cate_auth) {
                $map['category_id'] = array('IN', $cate_auth);
            } else {
                $map['category_id'] = -1;
            }
        }
        $list = $this->lists(M('Document'), $map, 'update_time desc');
        //处理列表数据
        if (is_array($list)) {
            foreach ($list as $k => &$v) {
                $v['username'] = get_nickname($v['uid']);
            }
        }

        $this->assign('list', $list);
        $this->meta_title = '待审核';
        $this->display();
    }

    /**
     * 回收站列表
     * @author huajie <banhuajie@163.com>
     */
    public function recycle()
    {
        //获取左边菜单
        $this->getMenu();

        $map['status'] = -1;
        if (!IS_ROOT) {
            $cate_auth = AuthGroupModel::getAuthCategories(UID);
            if ($cate_auth) {
                $map['category_id'] = array('IN', $cate_auth);
            } else {
                $map['category_id'] = -1;
            }
        }
        $list = $this->lists(M('Document'), $map, 'update_time desc');

        //处理列表数据
        if (is_array($list)) {
            foreach ($list as $k => &$v) {
                $v['username'] = get_nickname($v['uid']);
            }
        }

        $this->assign('list', $list);
        $this->meta_title = '回收站';
        $this->display();
    }

    /**
     * 写文章时自动保存至草稿箱
     * @author huajie <banhuajie@163.com>
     */
    public function autoSave(){
        $res = D('Document')->autoSave();
        if ($res !== false) {
            $return['data'] = $res;
            $return['info'] = '保存草稿成功';
            $return['status'] = 1;
            $this->ajaxReturn($return);
        } else {
            $this->error('保存草稿失败：' . D('Document')->getError());
        }
    }
    /*
         *便民服务信息
         *
         * */
    public function bianmin(){
        $list = M('convenient')->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }
//便民栏目
    public function bianminlm(){
        $list = M('card')->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }
    //便民栏目删除功能
    public function shanchu_bianmins(){
        $sid = $_GET['id'];
        $where=array('id'=>$sid);
        $dt = M('card');
        $res=$dt->where($where)->delete();
        if($res){
            $this->success('删除成功');exit;
        }else{
            $this->error('删除失败');exit;
        }
        $this->display();
    }
    //便民服务新增栏目
    public function lanmutianj(){
                $data=I('post.');//获取前端传过来的ID
                $datas=array('category'=>$data['category'],);
                $res=M('card')->add($datas);//更新修改的信息入库
                if($res){
                    $this->success('添加成功');exit;
                }else{
                    $this->error('添加失败');exit;
                }
        }


    /*
           *审核便民服务信息
           *
           * */
    public function bianmin_shenhe(){
        $sid = $_GET['id'];
        $where=array('id'=>$sid);
        $dt = M('convenient');
        //$zhuangtai = 1;
        $status = array('status'=>1);
        $res=$dt->where($where)->save($status);
        if($res){
            $this->success('审核成功');exit;
        }else{
            $this->error('审核失败');exit;
        }
        $this->display();
    }
    /*
     * 删除一条便民服务信息
     *
     *
     * */
    public function shanchu_bianmin(){
        $sid = $_GET['id'];

        $where=array('id'=>$sid);
        $dt = M('convenient');
        $res=$dt->where($where)->delete();
        if($res){
            $this->success('删除成功');exit;
        }else{
            $this->error('删除失败');exit;
        }
        $this->display();
    }



    /*
    * 我的页面/简历
    * */
    public function jianli(){
        $list = M('resume')
            ->field('id,picture,name,gender,age,education,worktime,region,jobinten')
            ->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }
    /*
     * 编辑我的页面/简历
     * */
    public function jianli_edit(){
        if(IS_POST){
            $data=I('post.');//获取前端传过来的ID
            $where=array('id'=>$data['id']);
            $datas=array(
                'picture'=>$data['picture'],
                'name'=>$data['name'],
                'gender'=>$data['gender'],
                'age'=>$data['age'],
                'education'=>$data['education'],
                'worktime'=>$data['worktime'],
                'region'=>$data['region'],
                'jobinten'=>$data['jobinten']
            );
            $res=M('resume')->where($where)->save($datas);//更新修改的信息入库
            if($res){
                $this->success('修改成功');exit;
            }else{
                $this->error('修改失败');exit;
            }
        }
        //获取左边菜单
        $this->getMenu();
        $id = I('param.id');

        if (empty($id)) {
            $this->error('参数不能为空！');
        }

        // 获取详细数据
        $Document = D('resume');
        $data = $Document->where(array('id'=>$id))->find();
        if (!$data) {
            $this->error($Document->getError());
        }
        $this->assign('data', $data);

        $this->meta_title = '编辑文档';
        $this->display();
    }

    /*
     * 删除我的页面/简历
     * */
    public function shanchu_jianli(){
        $sid = $_GET['id'];
        $where=array('id'=>$sid);
        $dt = M('resume');
        $res=$dt->where($where)->delete();
        if($res){
            $this->success('删除成功');exit;
        }else{
            $this->error('删除失败');exit;
        }
        $this->display();
    }

    /*
    * 首页/首页公告
    * */
//    public function shouyegonggao(){
//    $list = M('shouyegonggao')
//        ->field('id,picture,title,cartridge')
//        ->select();
//    $this->getMenu();
//    $this->assign('list', $list);
//    $this->display();
//}
//    /*
//     * 编辑首页公告
//     * */
//    public function shouyegonggao_edit(){
//        if(IS_POST){
//            $data=I('post.');//获取前端传过来的ID
//            $where=array('id'=>$data['id']);
//            $datas=array(
//                'name'=>$data['name'],
//                'title'=>$data['title'],
//                'cartridge'=>$data['cartridge']
//            );
//            $res=M('shouyegonggao')->where($where)->save($datas);//更新修改的信息入库
//            if($res){
//                $this->success('修改成功');exit;
//            }else{
//                $this->error('修改失败');exit;
//            }
//        }
//        //获取左边菜单
//        $this->getMenu();
//        $id = I('param.id');
//
//        if (empty($id)) {
//            $this->error('参数不能为空！');
//        }
//
//        // 获取详细数据
//        $Document = D('shouyegonggao');
//        $data = $Document->where(array('id'=>$id))->find();
//        if (!$data) {
//            $this->error($Document->getError());
//        }
//        $this->assign('data', $data);
//
//        $this->meta_title = '编辑文档';
//        $this->display();
//    }
//    /*
//         * 删除首页公告
//         * */
//    public function shanchu_shouyegonggao(){
//        $sid = $_GET['id'];
//        $where=array('id'=>$sid);
//        $dt = M('shouyegonggao');
//        $res=$dt->where($where)->delete();
//        if($res){
//            $this->success('删除成功');exit;
//        }else{
//            $this->error('删除失败');exit;
//        }
//        $this->display();
//    }

    /*
    * 企业信息
    * */
    public function company(){
        $list = M('company')
            ->field('id,companyname,creditcode,name,mobile,site,companyprofile')
            ->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }

    /*
     * 删除company一条数据
     * */
    public function shanchu(){
            $sid = $_GET['id'];
            $where=array('id'=>$sid);
            $dt = M('company');
            $res=$dt->where($where)->delete();
            if($res){
                $this->success('删除成功');exit;
            }else{
                $this->error('删除失败');exit;
            }
        $this->display();
    }
    /*
     * 删除personal一条数据
     * */
    public function shanchu_personal(){
        $sid = $_GET['id'];
        $where=array('id'=>$sid);
        $dt = M('personal');
        $res=$dt->where($where)->delete();
        if($res){
            $this->success('删除成功');exit;
        }else{
            $this->error('删除失败');exit;
        }
        $this->display();
    }

    /*
     * 编辑企业信息
     * */
    public function company_edit(){

        if(IS_POST){
            $data=I('post.');//获取前端传过来的ID
            $where=array('id'=>$data['id']);
            $datas=array(
                'companyname'=>$data['companyname'],
                'picture'=>$data['picture'],
                'creditcode'=>$data['creditcode'],
                'name'=>$data['name'],
                'mobile'=>$data['mobile'],
                'phone'=>$data['phone'],
                'site'=>$data['site'],
                'companyprofile'=>$data['companyprofile'],
                'superstar'=>$data['superstar'],
                'jobinten'=>$data['jobinten'],
                'pay'=>$data['pay'],
                'jobtitle'=>$data['jobtitle'],
                'jobfield'=>$data['jobfield'],
                'fulltime'=>$data['fulltime'],
            );
            $res=M('company')->where($where)->save($datas);//更新修改的信息入库
            if($res){
                $this->success('修改成功');exit;
            }else{
                $this->error('修改失败');exit;
            }
        }
        //获取左边菜单
        $this->getMenu();
        $id = I('param.id');

        if (empty($id)) {
            $this->error('参数不能为空！');
        }

        // 获取详细数据
        $Document = D('company');
        $data = $Document->where(array('id'=>$id))->find();
        if (!$data) {
            $this->error($Document->getError());
        }
        $this->assign('data', $data);

        $this->meta_title = '编辑文档';
        $this->display();
    }

    /*
     * 个人认证
     * */
    public function renzheng()
    {
        $list = M('personal')
            ->field('id,name,gender,mobile,birthday,education,major,worktime,email,card')
            ->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }

    /*
    * 企业职位信息
    * */
    public function company_job(){
        $list = M('company_job')
            ->where('title is not null')
            ->field('id,companyname,name,mobile,site,companyprofile,title,pay,jobfield,fulltime,requirement,describe,number')
            ->select();
        $this->getMenu();//获取左边菜单栏
        $this->assign('list', $list);
        $this->display();
    }
    /*
     * 删除company一条职位数据
     * */
    public function shanchu_job(){
        $sid = $_GET['id'];
        $where=array('id'=>$sid);
        $dt = M('company_job');
        $res=$dt->where($where)->delete();
        if($res){
            $this->success('删除成功');exit;
        }else{
            $this->error('删除失败');exit;
        }
        $this->display();
    }
    /*
     * 编辑企业职位信息
     * */
    public function company_job_edit(){

        if(IS_POST){
            $data=I('post.');//获取前端传过来的ID
            $where=array('id'=>$data['id']);
            $datas=array(

                'companyname'=>$data['companyname'],
                'name'=>$data['name'],
                'mobile'=>$data['mobile'],
                'site'=>$data['site'],
                'companyprofile'=>$data['companyprofile'],
                'title'=>$data['title'],
                'pay'=>$data['pay'],
                'jobtitle'=>$data['jobtitle'],
                'jobfield'=>$data['jobfield'],
                'fulltime'=>$data['fulltime'],
                'requirement'=>$data['requirement'],
                'describe'=>$data['describe'],
                'number'=>$data['number']

            );
            $res=M('company_job')->where($where)->save($datas);//更新修改的信息入库
            if($res){
                $this->success('修改成功',U('article/company_job'));exit;
            }else{
                $this->error('修改失败');exit;
            }
        }
        //获取左边菜单
        $this->getMenu();
        $id = I('param.id');

        if (empty($id)) {
            $this->error('参数不能为空！');
        }

        // 获取详细数据
        $Document = D('company_job');
        $data = $Document->where(array('id'=>$id))->find();
        if (!$data) {
            $this->error($Document->getError());
        }
        $this->assign('data', $data);

        $this->meta_title = '编辑文档';
        $this->display();
    }


    /**
     * 草稿箱
     * @author huajie <banhuajie@163.com>
     */
    public function draftBox()
    {
        //获取左边菜单
        $this->getMenu();

        $Document = D('Document');
        $map = array('status' => 3, 'uid' => UID);
        $list = $this->lists($Document, $map);
        //获取状态文字
        //int_to_string($list);

        $this->assign('list', $list);
        $this->meta_title = '草稿箱';
        $this->display();
    }

    /**
     * 我的文档
     * @author huajie <banhuajie@163.com>
     */
    public function mydocument($status = null, $title = null)
    {
        //获取左边菜单
        $this->getMenu();

        $Document = D('Document');
        /* 查询条件初始化 */
        $map['uid'] = UID;
        if (isset($title)) {
            $map['title'] = array('like', '%' . $title . '%');
        }
        if (isset($status)) {
            $map['status'] = $status;
        } else {
            $map['status'] = array('in', '0,1,2');
        }
        if (isset($_GET['time-start'])) {
            $map['update_time'][] = array('egt', strtotime(I('time-start')));
        }
        if (isset($_GET['time-end'])) {
            $map['update_time'][] = array('elt', 24 * 60 * 60 + strtotime(I('time-end')));
        }
        //只查询pid为0的文章
        $map['pid'] = 0;
        $list = $this->lists($Document, $map, 'update_time desc');
        $list = $this->parseDocumentList($list, 1);

        // 记录当前列表页的cookie
        Cookie('__forward__', $_SERVER['REQUEST_URI']);
        $this->assign('status', $status);
        $this->assign('list', $list);
        $this->meta_title = '我的文档';
        $this->display();
    }

    /**
     * 还原被删除的数据
     * @author huajie <banhuajie@163.com>
     */
    public function permit()
    {
        /*参数过滤*/
        $ids = I('param.ids');
        if (empty($ids)) {
            $this->error('请选择要操作的数据');
        }

        /*拼接参数并修改状态*/
        $Model = 'Document';
        $map = array();
        if (is_array($ids)) {
            $map['id'] = array('in', $ids);
        } elseif (is_numeric($ids)) {
            $map['id'] = $ids;
        }
        $this->restore($Model, $map);
    }

    /**
     * 清空回收站
     * @author huajie <banhuajie@163.com>
     */
    public function clear()
    {
        $res = D('Document')->remove();
        if ($res !== false) {
            $this->success('清空回收站成功！');
        } else {
            $this->error('清空回收站失败！');
        }
    }

    /**
     * 移动文档
     * @author huajie <banhuajie@163.com>
     */
    public function move()
    {
        if (empty($_POST['ids'])) {
            $this->error('请选择要移动的文档！');
        }
        session('moveArticle', $_POST['ids']);
        session('copyArticle', null);
        $this->success('请选择要移动到的分类！');
    }

    /**
     * 拷贝文档
     * @author huajie <banhuajie@163.com>
     */
    public function copy()
    {
        if (empty($_POST['ids'])) {
            $this->error('请选择要复制的文档！');
        }
        session('copyArticle', $_POST['ids']);
        session('moveArticle', null);
        $this->success('请选择要复制到的分类！');
    }

    /**
     * 粘贴文档
     * @author huajie <banhuajie@163.com>
     */
    public function paste()
    {
        $moveList = session('moveArticle');
        $copyList = session('copyArticle');
        if (empty($moveList) && empty($copyList)) {
            $this->error('没有选择文档！');
        }
        if (!isset($_POST['cate_id'])) {
            $this->error('请选择要粘贴到的分类！');
        }
        $cate_id = I('post.cate_id');   //当前分类
        $pid = I('post.pid', 0);        //当前父类数据id

        //检查所选择的数据是否符合粘贴要求
        $check = $this->checkPaste(empty($moveList) ? $copyList : $moveList, $cate_id, $pid);
        if (!$check['status']) {
            $this->error($check['info']);
        }

        if (!empty($moveList)) {// 移动    TODO:检查name重复
            foreach ($moveList as $key => $value) {
                $Model = M('Document');
                $map['id'] = $value;
                $data['category_id'] = $cate_id;
                $data['pid'] = $pid;
                //获取root
                if ($pid == 0) {
                    $data['root'] = 0;
                } else {
                    $p_root = $Model->getFieldById($pid, 'root');
                    $data['root'] = $p_root == 0 ? $pid : $p_root;
                }
                $res = $Model->where($map)->save($data);
            }
            session('moveArticle', null);
            if (false !== $res) {
                $this->success('文档移动成功！');
            } else {
                $this->error('文档移动失败！');
            }
        } elseif (!empty($copyList)) { // 复制
            foreach ($copyList as $key => $value) {
                $Model = M('Document');
                $data = $Model->find($value);
                unset($data['id']);
                unset($data['name']);
                $data['category_id'] = $cate_id;
                $data['pid'] = $pid;
                $data['create_time'] = NOW_TIME;
                $data['update_time'] = NOW_TIME;
                //获取root
                if ($pid == 0) {
                    $data['root'] = 0;
                } else {
                    $p_root = $Model->getFieldById($pid, 'root');
                    $data['root'] = $p_root == 0 ? $pid : $p_root;
                }

                $result = $Model->add($data);
                if ($result) {
                    $logic = logic($data['model_id']);
                    $data = $logic->detail($value); //获取指定ID的扩展数据
                    $data['id'] = $result;
                    $res = $logic->add($data);
                }
            }
            session('copyArticle', null);
            if ($res) {
                $this->success('文档复制成功！');
            } else {
                $this->error('文档复制失败！');
            }
        }
    }

    /**
     * 检查数据是否符合粘贴的要求
     * @author huajie <banhuajie@163.com>
     */
    protected function checkPaste($list, $cate_id, $pid)
    {
        $return = array('status' => 1);
        $Document = D('Document');

        // 检查支持的文档模型
        if ($pid) {
            $modelList = M('Category')->getFieldById($cate_id, 'model_sub');   // 当前分类支持的文档模型
        } else {
            $modelList = M('Category')->getFieldById($cate_id, 'model');   // 当前分类支持的文档模型
        }

        foreach ($list as $key => $value) {
            //不能将自己粘贴为自己的子内容
            if ($value == $pid) {
                $return['status'] = 0;
                $return['info'] = '不能将编号为 ' . $value . ' 的数据粘贴为他的子内容！';
                return $return;
            }
            // 移动文档的所属文档模型
            $modelType = $Document->getFieldById($value, 'model_id');
            if (!in_array($modelType, explode(',', $modelList))) {
                $return['status'] = 0;
                $return['info'] = '当前分类的文档模型不支持编号为 ' . $value . ' 的数据！';
                return $return;
            }
        }

        // 检查支持的文档类型和层级规则
        $typeList = M('Category')->getFieldById($cate_id, 'type'); // 当前分类支持的文档模型
        foreach ($list as $key => $value) {
            // 移动文档的所属文档模型
            $modelType = $Document->getFieldById($value, 'type');
            if (!in_array($modelType, explode(',', $typeList))) {
                $return['status'] = 0;
                $return['info'] = '当前分类的文档类型不支持编号为 ' . $value . ' 的数据！';
                return $return;
            }
            $res = $Document->checkDocumentType($modelType, $pid);
            if (!$res['status']) {
                $return['status'] = 0;
                $return['info'] = $res['info'] . '。错误数据编号：' . $value;
                return $return;
            }
        }

        return $return;
    }

    /**
     * 文档排序
     * @author huajie <banhuajie@163.com>
     */
    public function sort()
    {
        if (IS_GET) {
            //获取左边菜单
            $this->getMenu();

            $ids = I('get.ids');
            $cate_id = I('get.cate_id');
            $pid = I('get.pid');

            //获取排序的数据
            $map['status'] = array('gt', -1);
            if (!empty($ids)) {
                $map['id'] = array('in', $ids);
            } else {
                if ($cate_id !== '') {
                    $map['category_id'] = $cate_id;
                }
                if ($pid !== '') {
                    $map['pid'] = $pid;
                }
            }
            $list = M('Document')->where($map)->field('id,title')->order('level DESC,id DESC')->select();

            $this->assign('list', $list);
            $this->meta_title = '文档排序';
            $this->display();
        } elseif (IS_POST) {
            $ids = I('post.ids');
            $ids = array_reverse(explode(',', $ids));
            foreach ($ids as $key => $value) {
                $res = M('Document')->where(array('id' => $value))->setField('level', $key + 1);
            }
            if ($res !== false) {
                $this->success('排序成功！');
            } else {
                $this->error('排序失败！');
            }
        } else {
            $this->error('非法请求！');
        }
    }
}